#ifndef M_CMD_DECODE_H
#define M_CMD_DECODE_H "m_cmd_decode"

#include "m_cmd.h"

/** 不完整指令缓存 */
typedef struct {
    /** 当前已缓存指令包内容长度 */
    unsigned int size;
    /** 缓存的指令包内容 */
    char buf[SOCKE_CMD_BUF_MAX];
} decode_cache;

/** 要分解出指令的原始数据 */
typedef struct {
    /** 原始数据 */
    const char *buf;
    /** 原始数据长度 */
    const unsigned int size;
    /** 下一轮分解起始位置 */
    unsigned int index;
} decode_data;

/** 分解出的指令基本信息 */
typedef struct {
    cmd_ack_type ackType :1;
    cmd_biz_type bizType :8;
    unsigned int serialNo;
    unsigned int size;
    char *buf;
} decode_result;

int m_decode(decode_cache *cache, decode_data *data, decode_result *result);

#endif // M_CMD_DECODE_H